﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using DTO;
using BUS;
using QLVBDQ.UIControl;

namespace QLVBDQ
{
    /// <summary>
    /// Interaction logic for LapPhieuMuaHang.xaml
    /// </summary>
    public partial class LapPhieuMuaHang : UserControl
    {
        private string maLoaiSP = string.Empty;

        public LapPhieuMuaHang()
        {
            InitializeComponent();
        }

        private void HoaDonMoi_Click(object sender, RoutedEventArgs e)
        {
            XoaHoaDon();
        }

        private void ThemSP_Click(object sender, RoutedEventArgs e)
        {
            ThemSanPham();
        }

        private void XuatHoaDon_Click(object sender, RoutedEventArgs e)
        {
            XuatPhieuMuaHang();
        }

        private void Thoat_Click(object sender, RoutedEventArgs e)
        {

        }

        private void XoaSP_Click(object sender, RoutedEventArgs e)
        {
            XoaSanPham();
        }

        private void listSanPham_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

        }

        private void maKhachHang_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Tab)
            {
                e.Handled = true;
                maSP.MakeFocus();
            }
        }

        private void maSP_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Tab)
            {
                e.Handled = true;
                soLuongMua.Focus();
            }
        }


        /// <summary>
        /// Load mã phiếu mua hàng khi khởi tạo
        /// </summary>
        private void LoadMaPhieu()
        {
            maPhieu.Text = PhieuMua_BUS.Instance.LayMaPhieuBanHangMax();
        }

        /// <summary>
        /// Lấy ngày giờ mặc định
        /// </summary>
        void SetNgayMacDinh()
        {
            ngayMua.DisplayDate = DateTime.Now;
            ngayMua.SelectedDate = DateTime.Now;

            ngayThanhtoan.DisplayDate = DateTime.Now;
            ngayThanhtoan.SelectedDate = DateTime.Now;
        }

        /// <summary>
        /// Khởi tạo Tự động điền cho Mã Khách Hàng
        /// </summary>
        void KhoiTaoMaKhachHangAuto()
        {
            List<string> list = KhachHang_BUS.Instance.LayToanBoMaKhachHang();
            for (int i = 0; i < list.Count; i++)
                maKhachHang.AddItem(new AutoCompleteEntry(list[i], list[i]));
        }

        /// <summary>
        /// Khởi tạo tự động điền cho mã sản phẩm
        /// </summary>
        void KhoiTaoMaSanPhamAuto()
        {
            List<string> list = SanPham_BUS.Instance.LayToanBoMaSanPham();
            for (int i = 0; i < list.Count; i++)
                maSP.AddItem(new AutoCompleteEntry(list[i], list[i]));
        }

        /// <summary>
        /// Tự động điền thông tin khách hàng khi biết mã khách hàng
        /// </summary>
        void TuDongDienThongTinKhachHang()
        {
            KhachHang_DTO kh = KhachHang_BUS.Instance.LayThongTinKhachHang(maKhachHang.Text);
            if (kh == null)
            {
                hoTen.Text = string.Empty;
                diaChi.Text = string.Empty;
                return;
            }
            hoTen.Text = kh.TenKhachHang;
            diaChi.Text = kh.DiaChi;
        }

        /// <summary>
        /// Tự động điền thông tin sản phẩm
        /// </summary>
        void TuDongDienThongTinSanPham()
        {
            SanPham_DTO sp = SanPham_BUS.Instance.LayThongTinSanPham(maSP.Text);
            if (sp == null)
            {
                tenSP.Text = string.Empty;
                loaiSanPham.Text = string.Empty;
                soLuongTon.Text = string.Empty;
                //donGiaBan.Text = string.Empty;
                maLoaiSP = string.Empty;
                return;
            }
            tenSP.Text = sp.TenSanPham;
            loaiSanPham.Text = sp.LoaiSP.TenLoaiSanPham;
            soLuongTon.Text = sp.SoLuongTon.ToString();
            //donGiaBan.Text = sp.DonGia.ToString();
            maLoaiSP = sp.LoaiSP.MaLoaiSanPham;
        }

        /// <summary>
        /// Xóa thông tin lập hóa đơn mới
        /// </summary>
        void XoaHoaDon()
        {
            // Xác nhận
            if (MessageBox.Show("Có chắc bạn muốn xóa!", "Cảnh báo", MessageBoxButton.YesNo) == MessageBoxResult.No)
                return;

            listSanPham.Items.Clear();
            listSanPham.Items.Refresh();

            // Xóa sp
            tenSP.Text = string.Empty;
            loaiSanPham.Text = string.Empty;
            soLuongTon.Text = string.Empty;
            donGiaMua.Text = string.Empty;
            maLoaiSP = string.Empty;
            maSP.Text = string.Empty;
            soLuongMua.Text = string.Empty;

            // Xóa khách hàng
            maKhachHang.Text = string.Empty;
            hoTen.Text = string.Empty;
            diaChi.Text = string.Empty;

            tongTien.Text = "0";
        }

        /// <summary>
        /// Thêm sản phẩm vào list
        /// </summary>
        private void ThemSanPham()
        {
            // Kiem tra
            if (maSP.Text == String.Empty)
            {
                MessageBox.Show("Bạn phải điền thông tin về sãn phẩm");
                return;
            }
            if (soLuongMua.Text == string.Empty)
            {
                MessageBox.Show("Bạn phải điền thông tin về số lượng mua");
                return;
            }
            try
            {
                Int32.Parse(soLuongMua.Text);
                Int32.Parse(donGiaMua.Text);
            }
            catch (FormatException e)
            {
                MessageBox.Show("Số lượng mua và đơn giá mua phải là chữ số!");
                return;
            }

            // Thêm vào list
            SanPham_DTO sp = new SanPham_DTO(maSP.Text, tenSP.Text, maLoaiSP, loaiSanPham.Text, long.Parse(donGiaMua.Text), Int32.Parse(soLuongMua.Text));
            sp.STT = listSanPham.Items.Count + 1;
            sp.ThanhTien = sp.SoLuongTon * sp.DonGia;
            listSanPham.Items.Add(sp);
            listSanPham.Items.Refresh();

            // Cho nó về empty
            tenSP.Text = string.Empty;
            loaiSanPham.Text = string.Empty;
            soLuongTon.Text = string.Empty;
            soLuongMua.Text = string.Empty;
            donGiaMua.Text = string.Empty;
            maLoaiSP = string.Empty;
            maSP.Text = string.Empty;
            soLuongMua.Text = string.Empty;
            TinhTongTien();

            MessageBox.Show("Thêm sản phẩm thành công!");
            maSP.MakeFocus();
        }

        /// <summary>
        /// Tính tổng tiền và cập nhật vào textbox
        /// </summary>
        private void TinhTongTien()
        {
            // Tinh tong tien
            long tongtien = 0;
            for (int i = 0; i < listSanPham.Items.Count; i++)
                tongtien += ((SanPham_DTO)listSanPham.Items[i]).ThanhTien;
            tongTien.Text = tongtien.ToString();
        }

        /// <summary>
        /// Hàm xóa sản phẩm trong list
        /// </summary>
        void XoaSanPham()
        {
            // Kiểm tra xóa sản phẩm
            if (listSanPham.SelectedIndex == -1)
            {
                MessageBox.Show("Bạn phải chọn sản phẩm để xóa");
                return;
            }

            // XÓa ngay và luôn
            listSanPham.Items.Remove(listSanPham.SelectedItem);
            TinhTongTien();
            MessageBox.Show("Xóa thành công");
        }

        /// <summary>
        /// Lưu phiếu mua hàng và chi tiết phiếu mua hàng vào csdl
        /// </summary>
        void XuatPhieuMuaHang()
        {
            // Xác nhận
            if (MessageBox.Show("Có chắc bạn muốn xuất phiếu!", "Cảnh báo", MessageBoxButton.YesNo) == MessageBoxResult.No)
                return;

            // Thêm phiếu bán hàng
            long tongTien = 0;
            for (int i = 0; i < listSanPham.Items.Count; i++)
                tongTien += ((SanPham_DTO)listSanPham.Items[i]).ThanhTien;

            // Thêm phiếu bán hàng
            DateTime ngMua = ngayMua.SelectedDate.Value;
            DateTime ngTt = ngayThanhtoan.SelectedDate.Value;
            if (!PhieuMua_BUS.Instance.ThemPhieuMuaHangMoi(new PhieuMua_DTO("---", ngMua.Year, ngMua.Month, ngMua.Day,
                ngTt.Year, ngTt.Month, ngTt.Day, maKhachHang.Text, tongTien)))
            {
                MessageBox.Show("Thêm phiếu ko thành công");
                return;
            }

            // Thêm chi tiết phiếu bán hàng
            for (int i = 0; i < listSanPham.Items.Count; i++)
            {
                SanPham_DTO sp = (SanPham_DTO)listSanPham.Items[i];
                ChiTietPhieuMua_DTO phieu = new ChiTietPhieuMua_DTO("---", maPhieu.Text, sp.MaSanPham, sp.SoLuongTon, sp.DonGia);
                ChiTietPhieuMua_BUS.Instance.ThemChiTietPhieuMuaHang(phieu);
                // Cập nhật lại số lượng tồn
                SanPham_DTO spCu = SanPham_BUS.Instance.LayThongTinSanPham(sp.MaSanPham);
                spCu.SoLuongTon = spCu.SoLuongTon + sp.SoLuongTon;
                if (!SanPham_BUS.Instance.CapNhatSanPham(spCu))
                {
                    MessageBox.Show("Error: Lỗi tại cập nhật số lượng tồn sản phẩm");
                }
            }

            MessageBox.Show("Thêm phiếu mua hang thành công!");
        }

        private void maKhachHang_LostFocus(object sender, RoutedEventArgs e)
        {
            if (maKhachHang.IsElementFocused())
                return;

            TuDongDienThongTinKhachHang();
        }

        private void maSP_LostFocus(object sender, RoutedEventArgs e)
        {
            if (maSP.IsElementFocused())
                return;

            TuDongDienThongTinSanPham();
        }

        private void UserControl_Loaded_1(object sender, EventArgs e)
        {
            LoadMaPhieu();
            SetNgayMacDinh();
            KhoiTaoMaKhachHangAuto();
            KhoiTaoMaSanPhamAuto();
            maKhachHang.MakeFocus();
        }


    }
}
